Data trend analysis

ABSTRACT

Systems, methods, and other embodiments associated with history and scenario data tracking are described. In one embodiment, a method includes receiving a request for trending analysis on project data. The request includes a trend range and a time basis. The method also includes selecting a set of records that fall within the trend range from an item table associated with the time basis, and generating a snapshot of the project data for each effective time in each selected record in the item table. The generating includes executing a trend view on (i) a history table storing a version history for every record modified, (ii) a transaction table storing a transaction history for every record modified, and (iii) a base table storing base records corresponding to a current version of the records to create the snapshot. The snapshots of project data are returned in response to the request for trending analysis.

CROSS REFERENCE TO RELATED APPLICATIONS

This disclosure is a Continuation of U.S. application Ser. No.“14/714,598” filed May 18, 2015, titled “Data Trend Analysis”, inventor:Brian Diehl, which claims the benefit of U.S. Provisional PatentApplication Ser. No. “62/136,792” filed Mar. 23, 2015, titled “History,Trending and Scenario Data Tracking”, inventor: Brian Diehl, andassigned to the present assignee, Each of the foregoing applications isincorporated herein in its entirety by reference.

BACKGROUND

Measuring progress against a baseline is a fundamental aspect of ProjectPortfolio Management. The baseline corresponds to the project's statusat some established point in the past and in some instances the baselineitself is adjusted during the course of the project. Thus, measuring aproject's progress against a baseline is a continuous and dynamicprocess that is often as important as maintaining the baseline itself.

BRIEF DESCRIPTION OF THE DRAWINGS AND EXHIBITS

The accompanying drawings, which are incorporated in and constitute apart of the specification, illustrate various systems, methods, andother embodiments of the disclosure. It will be appreciated that theillustrated element boundaries (e.g., boxes, groups of boxes, or othershapes) in the figures represent one embodiment of the boundaries. Insome embodiments one element may be implemented as multiple elements orthat multiple elements may be implemented as one element. In someembodiments, an element shown as an internal component of anotherelement may be implemented as an external component and vice versa.Furthermore, elements may not be drawn to scale.

FIG. 1 illustrates one embodiment of a system associated with historicaldata tracking.

FIG. 2 illustrates one embodiment of a system associated with historicaldata tracking.

FIG. 3 illustrates one embodiment of a method associated with historicaldata tracking.

FIG. 4 illustrates one embodiment of a system associated with analyzingproject history using named snapshots.

FIG. 5 illustrates one embodiment of a system associated with data trendanalysis for project data.

FIG. 6 illustrates one embodiment of a system associated with data trendanalysis for project data.

FIG. 7 illustrates one embodiment of a method associated with systemassociated with data trend analysis for project data.

FIG. 8 illustrates an embodiment of a computing system configured withthe example systems and/or methods disclosed.

DETAILED DESCRIPTION

Traditional approaches to tracking project progress capture and store“snapshots” of the entire project. The snapshots are complete copies ofall project data including data that is usually hidden from the everydayuser of the project portfolio management solution. Each snapshotconsumes a large amount of memory, so change management is oftenaccomplished by updating the snapshots when changes occur rather thanstoring a new snapshot, which results in the loss of original snapshotdata. Having a finite set of snapshots limits the granularity with whichanalysis can be performed.

Systems and methods are described herein that provide project progressmanagement without relying on stored snapshots. These systems andmethods improve over the prior art at least by reducing the memoryrequired to support a trending analysis of project progress. Rather thanstoring snapshots, the systems and methods herein maintain a few projecttracking tables and provide a mechanism for capturing project status atprescribed intervals to perform trending analysis. The systems andmethods herein provide the trending feature by accessing the base tableand the tracking tables as well as an item table that includes a recordfor each increment in a given time basis. By at least generatingsnapshots of project data from (i) a history table of all versions ofeach record in the project data that has been modified, (ii) atransaction table of transaction records for each record in the projectdata that has been modified, and (iii) a base table storing currentversions of the records in the project data, the improvement of theability to provide trend analysis at any granularity on-the-fly isenabled. Thus, copies of project data do not need to be stored, andmemory requirements are reduced.

In some embodiments, a method, a computer system, or a non-transitorycomputer-readable storage medium are provided that implement thefollowing: receiving a request for trending analysis on project data,where the request includes a trend range and a time basis; in responseto determining that an item table is associated with the time basis ofthe request, selecting the item table from amongst a plurality of itemtables that are each associated with a corresponding time basis, wherethe item table includes a record for each time increment of the timebasis, where each respective record includes an effective time for therespective time increment; selecting a set of records in the item tablethat fall within the trend range; generating a snapshot of the projectdata for each effective time in each respective selected record in theitem table, wherein the generating includes: maintaining a history tablethat stores a version history for each record in the project data thathas ever been modified, maintaining a transaction table that stores atransaction record for each record in the project data that has everbeen modified, and executing a trend view on the history table, thetransaction table, and a base table that stores base recordscorresponding to a current version of the records in the project data tocreate a snapshot for each effective time in the selected item tablerecords; and in response to the request for trending analysis, returningthe generated snapshots of project data.

Snapshots

FIG. 1 illustrates one embodiment of project tracking system 100 thatincludes project tracking logic 110 configured to populate and accessproject tracking data to perform various analyses related to projecttracking. Base project data may include, for example, recordscorresponding to various tasks that must be completed to complete aproject. Each record may store a task status, projected start and endtime, task cost, and so on for the task. As the project progresses,tasks are completed, start and end times are revised, and costs areupdated. These changes are reflected by editing the base project data.The project tracking data includes at least one base table 105 thatstores the current version of project data. For the purposes of thisdescription tables are data structures configured to store records incorresponding rows.

In a more general sense, project data encompasses any set of datarelated to the same functional area. For example an employee base tablemay be maintained by human resources or payroll. Some of the examplesthat follow are in the context of an employee base table, but theprinciples of operation demonstrated in the examples are agnostic withrespect to the type of data stored in the base table.

The project tracking logic 110 includes history logic 120 and snapshotlogic 130. The history logic maintains one or more tracking 115 tablesstored with the project tracking data. Snapshot logic 130 interacts withthe tracking tables 115 along with the project's base table 105 toprovide, on demand, a snapshot result that includes the values stored inthe base table as of a given snapshot date.

FIG. 2 illustrates on embodiment of a project tracking logic 210 thatincludes history logic 220 and snapshot logic 230. The history logic 220maintains a history table 215 a and a transaction table 215 b that areexamples of the tracking tables 115 of FIG. 1. The history table 215 ahas the same column structure as the base table 105 and is initiallyempty. For the purposes of this description each row in the base table105 stores a “base record” that has a unique primary key (e.g. a uniqueidentifier such as a row id in some databases). The terms “row in thebase table 105” and “base record” are used interchangeably and areintended to have the same meaning.

As the base table 105 is updated, the history table 215 a stores rowscontaining historical records. Each historical record corresponds to aprior version of a row in the base table 105 that is modified. In otherwords, when a row in the base table 105 is modified (e.g., updated ordeleted), prior to the modification being made in the base table 105,the history logic 220 stores the base record in its present condition asa historical record in the history table 215 a. If the base record ismodified a second time, a second historical record will be stored in thehistory table 215 a corresponding to the base record's condition priorto the second modification. The primary key for the base record linksthe base record to historical records corresponding to prior versions ofthe base record, if any, in the history table 215 a. The terms “row inthe history table” and “historical record” are used interchangeably andare intended to have the same meaning. Any base record in the base table105 that has not been modified will not have any correspondinghistorical records in the history table 215 a.

When a row is first added to the base table 105, no row is created inthe history table 215 a, however, the base table 105 stores a CREATE_TStimestamp for all rows that can be used to filter out “new” rows when aprior version of the base table 105 is being compiled as will bedescribe in more detail below. The history table 215 a includes columnsfor a BEGIN_TS and an END_TS. The BEGIN_TS is the timestamp at which therow was first valid. The END_TS is the timestamp at which the row waslast valid. Thus, the period between BEGIN_TS and END_TS defines a validperiod time for the row during which this version of the row wasactually present in the base table.

Because it can include a number of rows for each row that ever exists inthe base table 105, over the course of a project the history table 215 acan grow quite large. Thus it may be beneficial to partition the historytable 215 a. A partitioning scheme using time efficiently captures theexpansion of the history table. Time is the axis of growth for thehistory table so it is appropriate that the history table be physicallydivided in a time-wise fashion.

In one embodiment, the history table is range partitioned on the END_TScolumn such that each partition includes rows with an END_TS less than acertain value. With range partitioning, there is generally some maximumvalue partition that includes rows that are not part of any otherpartition. For the history table, a single maximum value partition canbe used at first, and as the history table grows, additional partitionscan be created. Because the END_TS will always be populated with thecurrent time when an update occurs, it is preferable, for partitioningpurposes, to the BEGIN_TS which will depend on how recently the row waslast updated.

The transaction table 215 b includes a single transaction record foreach base record in the base table 105 that has ever been modified(e.g., updated or deleted). The transaction table 215 b is used by thesnapshot logic 230 to determine whether a snapshot result shouldinclude, for a given primary key, the row from the base table 105 or arow from the history table 215 a. The transaction table includes threecolumns, Row ID (which refers to a row or rows in the history tableusing the same primary key as the base table), BEGIN_TS, and END_TS. Theterms “transaction record” and “row in the transaction table” are usedinterchangeably and are intended to have the same meaning.

There is at most only one row in the transaction table 215 b for everyrow that was ever in the base table 105. Thus, when a base record isfirst modified, a corresponding transaction record is created in thetransaction table 215 b. The BEGIN_TS records the CREATE_TS timestampfor the base record from the base table 105. The END_TS records thetimestamp when the base record was modified. Of course, at the sametime, the unmodified version of the base record is stored in the historytable 215 a. When a base record is modified for a second time, theEND_TS in the transaction table 215 b is changed to correspond to thedate of the second modification while the BEGIN_TS remains the same.Thus, it can be seen that the range between BEGIN_TS and END_TS in thetransaction table 215 b represents a time range when there is at leastone historical record in the history table 215 a for the given baserecord.

The following is an example of how the history logic 220 populates ahistory table called HT$EMP and a transaction table called HTX$EMP inresponse to modifications to a base table called EMP. The example beginswith a new row for a new employee “Mason” being inserted into the EMPtable. The record is created in the past by using the SET_CURRENT_DATEprocedure to set the current time to May 14, 2013 (the date may also beimplied from the current system date/time):

exec co_session.set_current_date(DATE ‘2013-05-14’); insert into emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) values(9002,‘MASON’,‘QA’,7788,DATE ‘2012-05-14’,650,0,30) / commit;

As already discussed, no row is created in the HT$EMP or HTX$EMP tablefor this new insert. This is because the only version of the row is theone inserted in the base table EMP. Thus the tables HT$EMP and HTX$EMPare empty and the EMP base table includes the following base record:

CREATE_TS UPDATE_TS EMPNO ENAME SAL JOB May 14, 2013 May 14, 2013 9002MASON 650 QA

Several days later on May 21, 2013 employee MASON gets a promotion andthe base table EMP is updated as follows:

exec co_session.set_current_date(DATE ‘2013-05-21’); update emp setsal=670, job=‘QA2’ where ename = ‘MASON’; commit;

The base table EMP now includes the base record:

CREATE_TS UPDATE_TS EMPNO ENAME SAL JOB May 14, 2013 May 21, 2013 9002MASON 670 QA2

This is the first time a row storing a copy of the data for Mason isstored in the history table HT$EMP. Only saving the previous version ofthe row in the history table HT$EMP is necessary since the base tablerow has the current values for Mason. The history table HT$EMP now hasthe historical record:

BEGIN_TS END_TS EMPNO ENAME SAL JOB May 21, 2013 9002 MASON 650 QA

The transaction table HTX$EMP now has the transaction record:

EMPNO HT$BEGIN_TS HT$END_TS 9002 May 14, 2013 May 21, 2013

Note that the old values for SAL (650) and JOB (QA) are stored in thenew row in HT$EMP. These values were in effect until May 21, 2013. Thereis no need for a BEGIN_TS in the history table HT$EMP because theCREATE_TS of the row in the base table EMP indicates the earliestpossible effective date for the record. The HTX$EMP table has (andalways will have) only one row with a date/time range. This is theperiod of time for which there is a version of the row for Mason in thehistory table that should be used. If a snapshot result is requested forany time within that range, then a record for Mason will be pulled fromHT$EMP table instead of the base table EMP.

Finally, there was a mistake in the salary (SAL) granted for thepromotion. An update is made a week later on May 28, 2013 to correctthis error:

exec co_session.set_current_date(DATE ‘2013-05-28’); update emp setsal=675 where ename = ‘MASON’; commit;

The base table EMP now includes the base record:

CREATE_TS UPDATE_TS EMPNO ENAME SAL JOB May 14, 2013 May 28, 2013 9002MASON 675 QA2

Since this is a second update, a second row is added to HT$EMP (but notHTX$EMP). The history table HT$EMP now has the following two historicalrecords:

BEGIN_TS END_TS EMPNO ENAME SAL JOB May 21, 2013 9002 MASON 650 QA May21, 2013 May 28, 2013 9002 MASON 670 QAThe transaction table HTX$EMP now has the transaction record:

EMP_NO HT$BEGIN_TS HT$END_TS 9002 May 14, 2013 May 28, 2013

The additional row in HT$EMP has a BEGIN_TS value that corresponds tothe END_TS of the previous historical record. The range of time inHTX$EMP has been extended to cover the newly added history record. Itcan be seen from the example that at any given time, one of the threerows (i.e., two in the history table and one in the base table) storedfor Mason corresponds to the version of the record. The snapshot logic230 includes a snapshot view 230 a that selects which row to include inthe snapshot result based on the date of the snapshot. When a snapshottable is sought for a snapshot date that falls within the range in thetransaction table 215 b for a given row, the snapshot table will includea row from the history table 215 a instead of the row in the base table105.

For simplicity, throughout this description the timestamp values are ata daily granularity. Of course, in many instances timestamp values havea much finer granularity, down to fractions of seconds. The level ofgranularity with which timestamps are handled does not affect thesystems and methods described herein in any significant manner.

FIG. 2 illustrates the functionality of one embodiment of a snapshotview 230 a acting on the base table 105, the history table 215 a, andthe transaction table 215 b to produce a “snapshot table” for the givendate. For the purposes of this clarity, in this description a “view” isa query that, when executed on the project tracking data returns resultsthat are sometimes cast as a “table.” A query on the project trackingdata may reference the view to use the table produced by the view as thesource data, rather than the base table. A table that results from aview is generated on demand and may not be stored in the long term,making it different in some ways from a traditional table.

The snapshot view 230 a combines selected rows from the base table 105and the history table 215 a using a Union operation. The snapshot view230 a performs a join operation between the base table 105 and thetransaction table 215 b to select base records in the base table 105that do not have a historical record in the history table that is validon the given date. The snapshot view 230 a combines the selected baserecords with historical records in the history table that are valid onthe given date to produce the snapshot table. In this manner, a snapshottable can be produced on demand for any instant in time, at the samelevel of granularity as the timestamp data. Any query that could beperformed on the base table 105 can be instead performed on the snapshottable.

The following example illustrates a snapshot view V_EMP_FB that acts onthe base table EMP, the history table HT$EMP, and the transaction tableHTX$EMP from the earlier example to produce a snapshot at a given date.A first query selects from the base table 105 using the current time:

select ename, sal, job from emp where ename = ‘MASON’

The result is the row from the base table showing the last update to setSAL=675 and JOB=QA2.

ENAME SAL JOB MASON 675 QA2

Next, using co_session.set_current_date, the snapshot view is used toflashback to May 15, 2013 to see what the data looked like then:

exec co_session.set_current_date(DATE ‘2013-5-15’); select ename, sal,job from v_emp_fb where ename = ‘MASON’

The result is the row from the history table that was valid on May 15,2013 and shows Mason's starting salary.

ENAME SAL JOB MASON 650 QA

Below is the snapshot view called V_EMP_FB referenced by the abovequery:

select h.EMPNO, h.ENAME, h.JOB, h.MGR, h.HIREDATE, h.SAL, h.COMM,h.DEPTNO, h.UPDATE_TS, h.UPDATE_USER,h.CREATE_TS, h.CREATE_USER fromHT$EMP h where ( ht$END_TS >= co_session.get_current_date_as_ts and (ht$BEGIN_TS < co_session.get_current_date_as_ts or ht$BEGIN_TS is null)and CREATE_TS <= co_session.get_current_date_as_ts) union all select /*+index(htx HTX$EMP_I2) */ h.EMPNO, h.ENAME, h.JOB, h.MGR, h.HIREDATE,h.SAL, h.COMM, h.DEPTNO, h.UPDATE_TS, h.UPDATE_USER, h.CREATE_TS,h.CREATE_USER FROM EMP h left outer join HTX$EMP htx ON h.rowid =chartorowid(ht$rid) and co_session.get_current_date_as_ts betweenht$BEGIN_TS and ht$END_TS where ht$rid is null and CREATE_TS <=co_session.get_current_date_as_ts

Note the references to co_session.get_current_date_as_ts. This is howthe value set in the procedure is used in the snapshot view. Thesnapshot view is always using the value of that function to determinethe “When” of the results. The snapshot view has two distinct queriesthat are stitched together with a UNION ALL. Overall, the snapshot viewwill either pull from the base table (second query) or from historicaldata (first query). In the second query, the snapshot query will returnrows from the base table unless either 1) the current_date is betweenthe BEGIN_TS and END_TS of the HTX$ record (meaning there is ahistorical row available) or 2) the current_date is before the CREATE_TSof the record.

In the historical query (first query), rows are returned if thecurrent_date is before the END_TS (but not before CREATE_TS) and afterBEGIN_TS. The final result is a snapshot table that represents aconsistent view of the base project data as it was at that time.

FIG. 3 illustrates one embodiment of a method 300 that is performed bythe history logic 220 and/or the snapshot logic 230 of FIG. 2. Themethod 300 includes, at 310 maintaining a history table and atransaction table. The history table stores, for each record in projectdata that has ever been modified, at least one historical record thatincludes i) a version of the record prior modification and ii) a validtime range that defines a time during which the version of the recordwas valid. The transaction table stores, for each record in the projectdata that has ever been modified, a transaction record that includeshistorical time range that defines a time during which a historicalrecord for the record is valid.

At 320 a request for a version of the project data as it existed at asnapshot time is received. The request may be received from a userentering a desired snapshot date and invoking a snapshot function (e.g.,by specifying the snapshot view as source data). At 330, in response tothe request, historical records are selected from the history table thathave a valid time range that includes the snapshot time. At 340, baserecords are selected that do not have a transaction record in thetransaction table with a history valid time that includes the snapshottime. At 350, the selected historical records and the selected baserecords are combined to create the snapshot result. In one embodiment,steps 330-350 are performed by using a snapshot view (e.g., snapshotview 230 a of FIG. 2).

Named Snapshots

In some situations it may be advantageous to allow a user toconveniently produce commonly used snapshots without having to enter theeffective date of the snapshot (hereinafter the “snapshot date”). Forexample, if a user often refers to the project data as of the end ofeach quarter, the user might want to store a named reference tosnapshots taken at the end of each quarter. If an important event occurson a certain date, it may be helpful to store a named reference thatwill produce a snapshot result at the time just prior to or immediatelyafter the event. The name of the reference can refer to the event sothat the user can produce the snapshot without having to remember theexact date of the event.

Referring now to FIG. 4, one embodiment of a system 400 is illustratedthat allows a user to create a named reference to a snapshot of projectdata taken at a particular point in time. For the purposes of thisdescription, a “snapshot” of project data is a set of rows selected fromthe base and historical tables that represent the project data at aneffective or “snapshot” time. To support named snapshots, a name table490 is provided that stores snapshot names mapped to snapshot times.When a user wishes to add a named snapshot to the system 400, she simplystores a snapshot name and snapshot time in the name table 490. Whilethe name table 490 shows only two columns, an additional column may beused to store a unique identifier for each named snapshot and anothercolumn may store a long description of the snapshot for reference by theusers.

The name table 490 shown in FIG. 4 includes a reference to a snapshotcalled “Endof2013” that has a snapshot time of Jun. 30, 2014 and areference to a snapshot called “1Q2014” that has a snapshot time of Sep.30, 2014. These two named snapshots align with a fiscal year that runsJuly 1 to June 30. The name table 490 includes a reference to a snapshotcalled “EndofAcme” that has a snapshot time of Jul. 21, 2012. This namedsnapshot captures project data just prior to the firing of a generalcontractor “Acme” that occurred on Jul. 21, 2012.

The system 400 includes snapshot logic 430 that accesses a namedsnapshot view 430 a that is similar to snapshot view 230 a of FIG. 2.The named snapshot view 430 a is configured to access the name table toretrieve a snapshot time mapped to a received snapshot name. The namedsnapshot view 430 a then creates a snapshot view at the snapshot time.The following table is configured to store the result of one embodimentof a named snapshot view that acts on an employee base table and historytables, where SYS_SNAPSHOT refers to the name table 490.

Name Null? Type SYS_SNAPSHOT_ID NUMBER(18) SNAPSHOT_SHORT_NAMEVARCHAR2(60 CHAR) SNAPSHOT_TIME TIMESTAMP(6) EMPNO NUMBER(4) ENAMEVARCHAR2(40) JOB VARCHAR2(36) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7, 2) DEPTNO NUMBER(2) UPDATE_TS TIMESTAMP(6) UPDATE_USERVARCHAR2(1020) CREATE_TS TIMESTAMP(6) CREATE_USER VARCHAR2(1020)ROW_TYPE CHAR(4)

The following illustrates one embodiment of a named snapshot view called“v_emp_sa” that accesses the sys_snapshot name table. Note thesimilarities between this named snapshot view and the example snapshotview provided above with reference to FIG. 2.

select ss.sys_snapshot_id, ss.snapshot_short_name, ss.snapshot_time,h.EMPNO, h.ENAME, h.JOB, h.MGR, h.HIREDATE, h.SAL, h.COMM, h.DEPTNO,h.UPDATE_TS, h.UPDATE_USER,h.CREATE_TS, h.CREATE_USER , ‘HIST’ ROW_TYPEfrom HT$EMP h inner join sys_snapshot ss on (ht$END_TS >=ss.snapshot_time and ( ht$BEGIN_TS < ss.snapshot_time union all select/*+ index(htx HTX$EMP_I2) */ ss.sys_snapshot_id, ss.snapshot_short_name,ss.snapshot_time, b.EMPNO, b.ENAME, b.JOB, h.MGR, b.HIREDATE, b.SAL,b.COMM, b.DEPTNO, b.UPDATE_TS, b.UPDATE_USER, b.CREATE_TS, b.CREATE_USER, ‘BASE’ ROW_TYPE FROM EMP b cross join sys_snapshot ss left outer joinHTX$EMP htx ON b.EMPNO = htx.EMPNO and ss.snapshot_time betweenht$BEGIN_TS and ht$END_TS where htx.EMPNO is null and b.CREATE_TS <=ss.snapshot_timeEach component of the named snapshot view performs a join operationbetween the base table or history tracking table and the name table 490to insert the snapshot time associated with the snapshot name as theeffective time of the snapshot view.

The following named snapshot query references a snapshot named “SNAP1”having an effective date of Jul. 23, 2014.

select row_type , to_char(create_ts,‘mm.dd.yyyy hh24:mi:ss’) create_ts ,to_char(update_ts,‘mm.dd.yyyy hh24:mi:ss’) update_ts , empno, ename,sal, job from v_emp_sa where snapshot_short_name = ‘SNAP1’When this query is performed the following snapshot view is returned:

ROW_TYPE CREATE_TS UPDATE_TS EMPNO ENAME SAL JOB HIST Dec. 17, 1980 Dec.17, 1980 7369 SMITH 800 CLERK HIST Feb. 22, 1981 Feb. 22, 1981 7521 WARD1250 SALESMAN HIST Jan. 4, 2014 Jul. 22, 2014 9010 BECKY 875 MANAGERBASE Feb. 20, 1981 Feb. 20, 1981 7499 ALLEN 1600 SALESMAN BASE Apr .2,1981 Apr. 2, 1981 7566 JONES 2975 MANAGER BASE Sep. 28, 1981 Sep. 28,1981 7654 MARTIN 1250 SALESMAN BASE May 1, 1981 May 1, 1981 7698 BLAKE2850 MANAGER BASE Jun. 9, 1981 Jun. 9, 1981 7782 CLARK 2450 MANAGER BASEDec. 9, 1982 Dec. 9, 1982 7788 SCOTT 3000 ANALYST BASE Nov. 17, 1981Nov. 17, 1981 7839 KING 5000 PRESIDENTIt can be seen that none of the data in the snapshot view has beenupdated after Jul. 23, 2014, which is the effective date of SNAP1.Data Trend Analysis Using Snapshot Views

Trend analysis is an important feature of project data tracking. Often,a user will want to see how certain data changes as a function of someregular time basis, like daily or monthly. Traditional systems wouldstore a copy of all project data at each desired time increment, whichconsumes lots of memory and limits the granularity of trend analysis tothe granularity of the stored copies of project data. Systems andmethods described herein extend the concept of the snapshot viewdescribed in FIGS. 1-3 to provide trend analysis at any granularityon-the-fly so that copies of project data do not need to be stored, andmemory requirements are reduced.

FIG. 5 illustrates one example embodiment of a system 500 that outputs atrend result in response to a request for trend analysis. In oneembodiment, the request includes trend data that specifies a trend rangeand a time basis (e.g., daily, weekly, and so on). The trend resultcaptures project data status at regular intervals within the trendrange. The time basis in the request dictates at which particular timeincrements the project data is captured.

The system 500 includes trend logic 540 that cooperates with snapshotlogic 530 to generate a set of snapshots of project data, taken atregular intervals, that together represent a requested trend. To producethe trend result, the trend logic 540 provides a set of effective times,one for each time increment in the trend range, to the snapshot logic530. The snapshot logic 530 is an adaptation of the snapshot logic 130of FIG. 1 that generates a snapshot for each of the effective timesinstead of a single snapshot time. The trend logic 540 accesses one ormore trending tables 555 to determine the set of effective times forwhich snapshots should be generated by the snapshot logic 530.

Referring now to FIG. 6, one example embodiment of a system 600 thatperforms trending analysis on project data is illustrated. To supporttrend analysis, at least one item table 555 is stored for access by thetrend logic 540. Each item table stores a single record for each timeincrement in a given time basis. The item table 555 a shown in FIG. 6 iscalled “SYSWEEKMON” and has a record for each week, starting on Mondays,that has occurred or will ever occur (beginning and ending at somearbitrary system dates). An item table is stored for each time basis forwhich trending analysis is enabled. Thus, there may be an item table fordaily, weekly, monthly, quarterly, and so on.

Each record in an item table includes a display date and an effectivetime. The display date is a name recognized by a user as identifying aparticular time increment. For example, in the item table 555 a forweeks starting with Monday, the display date column stores the dates ofall Mondays in the years supported by the system 600. The item tablestores an effective time for each display date. Recall that theeffective time is the time that will be used by the snapshot logic 530to generate the snapshots in the trend result. Note that the effectivetime for January 5 is January 11 at 11:59 PM. This is because when theuser requests project status data for the week of January 5 what theyare expecting to see is the project status at the end of that week whichoccurs on Sunday, January 11 at 11:59 PM.

Each record in the item table stores a display date that describes aparticular time increment and an effective time that corresponds to atime at which project data should be captured for the particular timeincrement identified by the display date. In one embodiment, theeffective time corresponds to the end of the record's time increment.However, depending on user preferences, any convention could be used toassign effective times to display dates.

Many different item tables may be stored to support many differentrespective time bases. In one embodiment, the item table records for alldifferent time bases may be stored in one physical table. That is, theterm “table” may be taken in a logical sense, meaning the logicalgrouping of item period records for a given time basis within a singleitem table is an effective item table for that time basis. A certaincompany may conceptualize weeks as starting on Sundays, while anothercompany starts weeks on Saturdays. A different item table can be storedfor each of these different concepts of week. The display date cancorrespond to any name a user gives to a particular time increment(e.g., 2015 Week 1, 1^(st) Quarter Week 1, Jan. 5, 2015, First Monday2015, and so on). All of these factors make the item table an extremelyflexible way to capture trending intervals that make sense to a widevariety of potential users.

Further, the system 600 can be made extensible by allowing new itemtables to be added to support new trend intervals. In one embodiment, aperiod table (not shown) records each time basis for which an item tableis stored. The period table stores a name for the time basis (e.g.,Weekly Monday Start) that is recognizable to a user and the name of theitem table (e.g., SYSWEEKMON) that should be used when the time basis isrequested. The period table may also record the granularity of each itemtable (e.g., weekly).

To perform trending analysis, the system 600 is configured to receive arequest that includes a time basis and a trend range. For example, arequest might include a time basis of “weekly starting on Monday” and atrend range of Jan. 1, 2015 to Mar. 31, 2015. The trend logic 540selects the item table for the requested time basis (i.e., item tableSYSWEEKMON 555 a) and then selects a set of records from the item tablethat fall within the trend range (e.g., rows for January 5-Mar. 30,2015). Note that in the illustrated embodiment, the trend logic 540selects rows or records having a display date that falls within thetrend range. In other embodiments the trend logic 540 selects rows orrecords having an effective time that falls within the trend range.

The trend logic 540 provides the effective times from the selectedrecords to the snapshot logic 530, which uses a trending snapshot view530 a to generate a snapshot for each effective time. The following isan adaptation of the snapshot view 230 of FIG. 2 that will generate aset of snapshot view rows, one for each effective time in the selectedset of item table rows. The view will have the following columns:

Name Null? Type PERIOD_CODE VARCHAR(20 CHAR) TREND_DATE DATE EMPNONUMBER(4) ENAME VARCHAR2(40) JOB VARCHAR2(36) MGR NUMBER(4) HIREDATEDATE SAL NUMBER(7, 2) COMM NUMBER(7, 2) DEPTNO NUMBER(2) UPDATE_TSTIMESTAMP(6) UPDATE_USER VARCHAR2(1020) CREATE_TS TIMESTAMP(6)CREATE_USER VARCHAR2(1020) ROW_TYPE CHAR(4)

In the above trending snapshot view result, “period_code” is the name ofthe item table taken from time basis in the request, “trend_date” is thedate range, and “row type” indicates whether the row comes from the basetable or the history table. In the view below, co_period_item is theselected item table, and d.d_date is the effective time from each of theselected rows in the item table.

select d.period_code, d.display_date trend_date, h.EMPNO, h.ENAME,h.JOB, h.MGR, h.HIREDATE, h.SAL, h.COMM, h.DEPTNO, h.UPDATE_TS,h.UPDATE_USER, h.CREATE_TS, h.CREATE_USER, ‘HIST’ ROW_TYPE from HT$EMPh, co_period_item dwheren(h.ht$END_TS>=d.day_dateand(h.ht$BEGIN_TS<d.day_date) union allselect /*+ index(htx HTX$EMP_I2) */ d.period_code, d.display_datetrend_date, b.EMPNO, b.ENAME, b.JOB, b.MGR, b.HIREDATE, b.SAL, b.COMM,b.DEPTNO, b.UPDATE_TS, b.UPDATE_USER, b.CREATE_TS, b.CREATE_USER, ‘BASE’ROW_TYPE FROM EMP b full join co_period_item d ON 1=1 left outer joinHTX$EMP htx ON b.EMPNO = htx.EMPNO and d.day_date betweenhtx.ht$BEGIN_TS and htx.ht$END_TS where htx.EMPNO is null andb.CREATE_TS <= d.day_date

This snapshot view 530 a is illustrated functionally in FIG. 6 as aunion of i) a join between the rows selected from the item table and thehistory table and ii) a join between the rows selected from the itemtable and the base table joined with the transaction table. An examplerequest for a trending analysis for the Mason's salary between Apr. 20,2015 and Apr. 24, 2015 on a daily basis would result in the followingquery on the trending snapshot view 530 a (called “v_emp_tr):

Select trend date, sal From v_emp_tr Where period code = ‘DAY’ And trenddate between ’20-APR-15’ and ’24-APR-15’ And ename - ‘MASON’;The query results in the following set of five snapshots shown as atrending table having five rows:

TREND DATE SAL 20 APR. 2015 1500 21 APR. 2015 1500 22 APR. 2015 1650 23APR. 2015 1650 24 APR. 2015 1650

FIG. 7 illustrates one example of a method 700 that returns a set ofsnapshots of project data taken at regular intervals in response to arequest for trending analysis. In one embodiment, the method isperformed by the project tracking logic 510 of FIGS. 5 and 6. The method700 includes, at 710, receiving a request for trending analysis onproject data, where the request includes a trend range and a time basis.The request may be received via a web browser, a cloud interface,population of a data structure with the trend range and time basis, orany other appropriate manner.

At 720, an item table associated with the time basis is selected. Theitem table includes a record for each time increment of the time basis,and each respective record includes an effective time for the respectivetime increment. The item table may be selected by accessing a periodtable that maps the requested time basis to a particular item table. At730, a set of records is selected from the item table that fall withinthe trend range and at 740 a snapshot of the project data is generatedfor each effective time of each respective selected record in the itemtable. A trending snapshot view such as the view 530 a described abovemay be used to generate the snapshots. At 750, the generated snapshotsof project data are returned in response to the request for trendinganalysis.

In one embodiment, the effective time for a time increment comprises atime at which the time increment ends. In one embodiment, the method 700includes storing a plurality of respective item tables for differentrespective time bases, and where each item table includes a record foreach time increment in the time basis for the item table. In oneembodiment, the method 700 includes storing a period table that recordseach time basis for which an item table is stored and accessing theperiod table to identify an item table associated with the time basis inthe request. In one embodiment, each item table record stores a displaydate that is different from the effective date. Records having a displaydate within the trend range are selected from the item table forgenerating the snapshots.

In one embodiment, the method 700 includes generating the snapshots bymaintaining a history table and a transaction table. The history tablestores, for each record in the project data that has ever been modified,at least one corresponding historical record that includes i) a versionof the record prior to modification and ii) a valid time range thatdefines a time during which the version of the record was valid. Thetransaction table stores, for each record in the project data that hasever been modified, a corresponding transaction record that includes ahistorical time range that defines a time during which a historicalrecord for the record is valid. The method includes executing a trendview on the history table, the transaction table, and a base table thatstores base records corresponding to a current version of the records inthe project data. The trend view is configured to, for each effectivetime in the selected item table records: i) select historical records inthe history table that have a valid time range that includes theeffective time; ii) select base records from the base table that do nothave a corresponding transaction record with a history valid time thatincludes the effective time; and iii) combine the selected historicalrecords and the selected base records to create a snapshot for theeffective time. In one embodiment, the trend view joins the selectedrecords in the item table to the base table and transaction table.

It can be seen from the foregoing description that the concept ofsnapshots can be extended using item tables to support trend analysisfor any time basis. An item table having a record that defines aneffective time for each time increment in a given time basis is used togenerate a set of snapshots that describe a trend. Additional itemtables can be added at any time to extend the types of trending analysisthat can be performed.

Computing Device Embodiment

FIG. 8 illustrates an example computing device that is configured and/orprogrammed with one or more of the example systems and methods describedherein, and/or equivalents. The example computing device may be acomputer 800 that includes a processor 802, a memory 804, andinput/output ports 810 operably connected by a bus 808. In one example,the computer 800 may include project tracking logic 830 configured tofacilitate project tracking using views and tracking tables in a mannersimilar to project tracking logic 110, 210, 410, and 510 shown in FIGS.1, 2, 4, 5, and 6, respectively. In different examples, the logic 830may be implemented in hardware, a non-transitory computer-readablemedium with stored instructions, firmware, and/or combinations thereof.While the logic 830 is illustrated as a hardware component attached tothe bus 808, it is to be appreciated that in other embodiments, thelogic 830 could be implemented in the processor 802, stored in memory804, or stored in disk 806.

In one embodiment, logic 830 or the computer is a means (e.g.,structure: hardware, non-transitory computer-readable medium, firmware)for performing the actions described. In some embodiments, the computingdevice may be a server operating in a cloud computing system, a serverconfigured in a Software as a Service (SaaS) architecture, a smartphone, laptop, tablet computing device, and so on.

The means may be implemented, for example, as an ASIC programmed toperform trending analysis using views and trending tables. The means mayalso be implemented as stored computer executable instructions that arepresented to computer 800 as data 816 that are temporarily stored inmemory 804 and then executed by processor 802.

Logic 830 may also provide means (e.g., hardware, non-transitorycomputer-readable medium that stores executable instructions, firmware)for performing trending analysis using views and trending tables.

Generally describing an example configuration of the computer 800, theprocessor 802 may be a variety of various processors including dualmicroprocessor and other multi-processor architectures. A memory 804 mayinclude volatile memory and/or non-volatile memory. Non-volatile memorymay include, for example, ROM, PROM, and so on. Volatile memory mayinclude, for example, RAM, SRAM, DRAM, and so on.

A storage disk 806 may be operably connected to the computer 800 via,for example, an input/output interface (e.g., card, device) 818 and aninput/output port 810. The disk 806 may be, for example, a magnetic diskdrive, a solid state disk drive, a floppy disk drive, a tape drive, aZip drive, a flash memory card, a memory stick, and so on. Furthermore,the disk 806 may be a CD-ROM drive, a CD-R drive, a CD-RW drive, a DVDROM, and so on. The memory 804 can store a process 814 and/or a data816, for example. The disk 806 and/or the memory 804 can store anoperating system that controls and allocates resources of the computer800.

The computer 800 may interact with input/output devices via the i/ointerfaces 818 and the input/output ports 810. Input/output devices maybe, for example, a keyboard, a microphone, a pointing and selectiondevice, cameras, video cards, displays, the disk 806, the networkdevices 820, and so on. The input/output ports 810 may include, forexample, serial ports, parallel ports, and USB ports.

The computer 800 can operate in a network environment and thus may beconnected to the network devices 820 via the i/o interfaces 818, and/orthe i/o ports 810. Through the network devices 820, the computer 800 mayinteract with a network. Through the network, the computer 800 may belogically connected to remote computers. Networks with which thecomputer 800 may interact include, but are not limited to, a LAN, a WAN,and other networks.

Definitions and Other Embodiments

In another embodiment, the described methods and/or their equivalentsmay be implemented with computer executable instructions. Thus, in oneembodiment, a non-transitory computer readable/storage medium isconfigured with stored computer executable instructions of analgorithm/executable application that when executed by a machine(s)cause the machine(s) (and/or associated components) to perform themethod. Example machines include but are not limited to a processor, acomputer, a server operating in a cloud computing system, a serverconfigured in a Software as a Service (SaaS) architecture, a smartphone, and so on). In one embodiment, a computing device is implementedwith one or more executable algorithms that are configured to performany of the disclosed methods.

In one or more embodiments, the disclosed methods or their equivalentsare performed by either: computer hardware configured to perform themethod; or computer software embodied in a non-transitorycomputer-readable medium including an executable algorithm configured toperform the method.

While for purposes of simplicity of explanation, the illustratedmethodologies in the figures are shown and described as a series ofblocks of an algorithm, it is to be appreciated that the methodologiesare not limited by the order of the blocks. Some blocks can occur indifferent orders and/or concurrently with other blocks from that shownand described. Moreover, less than all the illustrated blocks may beused to implement an example methodology. Blocks may be combined orseparated into multiple actions/components. Furthermore, additionaland/or alternative methodologies can employ additional actions that arenot illustrated in blocks. The methods described herein are limited tostatutory subject matter under 35 U.S.C § 101.

The following includes definitions of selected terms employed herein.The definitions include various examples and/or forms of components thatfall within the scope of a term and that may be used for implementation.The examples are not intended to be limiting. Both singular and pluralforms of terms may be within the definitions.

References to “one embodiment”, “an embodiment”, “one example”, “anexample”, and so on, indicate that the embodiment(s) or example(s) sodescribed may include a particular feature, structure, characteristic,property, element, or limitation, but that not every embodiment orexample necessarily includes that particular feature, structure,characteristic, property, element or limitation. Furthermore, repeateduse of the phrase “in one embodiment” does not necessarily refer to thesame embodiment, though it may.

ASIC: application specific integrated circuit.

CD: compact disk.

CD-R: CD recordable.

CD-RW: CD rewriteable.

DVD: digital versatile disk and/or digital video disk.

HTTP: hypertext transfer protocol.

LAN: local area network.

PCI: peripheral component interconnect.

PCIE: PCI express.

RAM: random access memory.

DRAM: dynamic RAM.

SRAM: synchronous RAM.

ROM: read only memory.

PROM: programmable ROM.

EPROM: erasable PROM.

EEPROM: electrically erasable PROM.

SQL: structured query language.

OQL: object query language.

USB: universal serial bus.

XML: extensible markup language.

WAN: wide area network.

A “data structure”, as used herein, is an organization of data in acomputing system that is stored in a memory, a storage device, or othercomputerized system. A data structure may be any one of, for example, adata field, a data file, a data array, a data record, a database, a datatable, a graph, a tree, a linked list, and so on. A data structure maybe formed from and contain many other data structures (e.g., a databaseincludes many data records). Other examples of data structures arepossible as well, in accordance with other embodiments.

“Computer-readable medium” or “computer storage medium”, as used herein,refers to a non-transitory medium that stores instructions and/or dataconfigured to cause a processor or computer to perform one or more ofthe disclosed functions when executed. A computer-readable medium maytake forms, including, but not limited to, non-volatile media, andvolatile media. Non-volatile media may include, for example, opticaldisks, magnetic disks, and so on. Volatile media may include, forexample, semiconductor memories, dynamic memory, and so on. Common formsof a computer-readable medium may include, but are not limited to, afloppy disk, a flexible disk, a hard disk, a magnetic tape, othermagnetic medium, an application specific integrated circuit (ASIC), aprogrammable logic device, a compact disk (CD), other optical medium, arandom access memory (RAM), a read only memory (ROM), a memory chip orcard, a memory stick, solid state storage device (SSD), flash drive, andother media from which a computer, a processor or other electronicdevice can function with. Each type of media, if selected forimplementation in one embodiment, may include stored instructions of analgorithm configured to perform one or more of the disclosed and/orclaimed functions. Computer-readable media described herein are limitedto statutory subject matter under 35 U.S.C § 101.

“Logic”, as used herein, represents a component that is implemented withcomputer or electrical hardware, a non-transitory medium with storedinstructions of an executable application or program module, and/orcombinations of these to perform any of the functions or actions asdisclosed herein, and/or to cause a function or action from anotherlogic, method, and/or system to be performed as disclosed herein.Equivalent logic may include firmware, a microprocessor programmed withan algorithm, a discrete logic (e.g., ASIC), at least one circuit, ananalog circuit, a digital circuit, a programmed logic device, a memorydevice containing instructions of an algorithm, and so on, any of whichmay be configured to perform one or more of the disclosed functions. Inone embodiment, logic may include one or more gates, combinations ofgates, or other circuit components configured to perform one or more ofthe disclosed functions. Where multiple logics are described, it may bepossible to incorporate the multiple logics into one logic. Similarly,where a single logic is described, it may be possible to distribute thatsingle logic between multiple logics. In one embodiment, one or more ofthese logics are corresponding structure associated with performing thedisclosed and/or claimed functions. Choice of which type of logic toimplement may be based on desired system conditions or specifications.For example, if greater speed is a consideration, then hardware would beselected to implement functions. If a lower cost is a consideration,then stored instructions/executable application would be selected toimplement the functions. Logic is limited to statutory subject matterunder 35 U.S.C. § 101.

An “operable connection”, or a connection by which entities are“operably connected”, is one in which signals, physical communications,and/or logical communications may be sent and/or received. An operableconnection may include a physical interface, an electrical interface,and/or a data interface. An operable connection may include differingcombinations of interfaces and/or connections sufficient to allowoperable control. For example, two entities can be operably connected tocommunicate signals to each other directly or through one or moreintermediate entities (e.g., processor, operating system, logic,non-transitory computer-readable medium). Logical and/or physicalcommunication channels can be used to create an operable connection.

“User”, as used herein, includes but is not limited to one or morepersons, computers or other devices, or combinations of these.

While the disclosed embodiments have been illustrated and described inconsiderable detail, it is not the intention to restrict or in any waylimit the scope of the appended claims to such detail. It is, of course,not possible to describe every conceivable combination of components ormethodologies for purposes of describing the various aspects of thesubject matter. Therefore, the disclosure is not limited to the specificdetails or the illustrative examples shown and described. Thus, thisdisclosure is intended to embrace alterations, modifications, andvariations that fall within the scope of the appended claims, whichsatisfy the statutory subject matter requirements of 35 U.S.C. § 101.

To the extent that the term “includes” or “including” is employed in thedetailed description or the claims, it is intended to be inclusive in amanner similar to the term “comprising” as that term is interpreted whenemployed as a transitional word in a claim.

To the extent that the term “or” is used in the detailed description orclaims (e.g., A or B) it is intended to mean “A or B or both”. When theapplicants intend to indicate “only A or B but not both” then the phrase“only A or B but not both” will be used. Thus, use of the term “or”herein is the inclusive, and not the exclusive use.

What is claimed is:
 1. A non-transitory computer-readable storage mediumstoring computer-executable instructions that when executed by at leasta processor of a computer cause the computer to: receive, by at leastthe processor, a request for trending analysis on project data, wherethe request includes a trend range and a time basis; in response todetermining that an item table is associated with the time basis of therequest, select, by at least the processor, the item table from amongsta plurality of item tables that are each associated with a correspondingtime basis, where the item table includes a record for each timeincrement of the time basis, where each respective record includes aneffective time for the respective time increment; select, by at leastthe processor, a set of records in the item table that fall within thetrend range; generate, by at least the processor, a snapshot of theproject data for each effective time in each respective selected recordin the item table, wherein the generation includes: maintaining ahistory table that stores a version history for each record in theproject data that has ever been modified, wherein the version historyhas at least one corresponding historical record that includes a validtime range during which a version of the record was valid, maintaining atransaction table that stores a transaction record for each record inthe project data that has ever been modified, and executing a trend viewon the history table, the transaction table, and a base table thatstores base records corresponding to a current version of the records inthe project data, to create a snapshot for each effective time in theselected item table records based at least in part on one or more of thehistorical records valid at the effective time; and in response to therequest for trending analysis, return, by at least the processor, thegenerated snapshots of project data.
 2. The non-transitorycomputer-readable storage medium of claim 1, where the effective timefor a time increment comprises a time at which the time increment ends.3. The non-transitory computer-readable storage medium of claim 1, whereeach item table includes a record for each time increment in the timebasis for the item table.
 4. The non-transitory computer-readablestorage medium of claim 3, where the instructions cause the computer to:store a period table that records each time basis for which an itemtable is stored; access the period table to identify an item tableassociated with the time basis in the request.
 5. The non-transitorycomputer-readable storage medium of claim 1, wherein: the at least onecorresponding historical record in the version history for each recordalso includes a version of the record prior to modification; thetransaction record for each record in the project data that has everbeen modified includes a historical time range that defines a timeduring which a historical record for the record is valid; and the trendview is configured to, for each effective time in the selected itemtable records: select historical records in the history table that havea valid time range that includes the effective time; select base recordsfrom the base table that do not have a corresponding transaction recordwith a history valid time that includes the effective time; and combinethe selected historical records and the selected base records to createthe snapshot for the effective time.
 6. The non-transitorycomputer-readable storage medium of claim 5, where the trend view joinsthe selected records in the item table to the base table and transactiontable.
 7. The non-transitory computer-readable storage medium of claim1, where each item table record stores a display date that is differentfrom the effective date, and where the instructions cause the computerto select records in the item table having a display date within thetrend range for generating the snapshots.
 8. A computing system,comprising: a processor; a memory operably connected to the processor; anon-transitory computer-readable storage medium operably connected tothe processor and storing computer-executable instructions that whenexecuted by at least the processor cause the computing system to:receive, by at least the processor, a request for trending analysis onproject data, where the request includes a trend range and a time basis;in response to determining that an item table is associated with thetime basis of the request, select, by at least the processor, the itemtable from amongst a plurality of item tables that are each associatedwith a corresponding time basis, where the item table includes a recordfor each time increment of the time basis, where each respective recordincludes an effective time for the respective time increment; select, byat least the processor, a set of records in the item table that fallwithin the trend range; generate, by at least the processor, a snapshotof the project data for each effective time in each respective selectedrecord in the item table, wherein the generation includes: maintaining ahistory table that stores a version history for each record in theproject data that has ever been modified, wherein the version historyhas at least one corresponding historical record that includes a validtime range that defines a time during which the version of the recordwas valid, maintaining a transaction table that stores a transactionrecord for each record in the project data that has ever been modified,and executing a trend view on the history table, the transaction table,and a base table that stores base records corresponding to a currentversion of the records in the project data, to create a snapshot foreach effective time in the selected item table records based at least inpart on one or more of the historical records valid at the effectivetime; and in response to the request for trending analysis, return, byat least the processor, the generated snapshots of project data.
 9. Thecomputing system of claim 8, wherein the effective time for a timeincrement comprises a time at which the time increment ends.
 10. Thecomputing system of claim 8, wherein the instructions cause thecomputing system to store a plurality of respective item tables in thecomputer-readable storage media for different respective time bases, andwhere each item table includes a record for each time increment in thetime basis for the item table.
 11. The computing system of claim 10,wherein the instructions cause the computing system to: store, in thecomputer-readable storage media, a period table that records each timebasis for which an item table is stored; and access the period table toidentify an item table associated with the time basis in the request.12. The computing system of claim 8, where the history table and thetransaction table are different tables.
 13. The computing system ofclaim 8, where each item table record stores a display date that isdifferent from the effective date, and where the processor is configuredto select records in the item table having a display date within thetrend range for generating the snapshots.
 14. A computer-implementedmethod comprising, with a processor: receiving a request for trendinganalysis on project data, where the request includes a trend range and atime basis; in response to determining that an item table is associatedwith the time basis of the request, selecting the item table fromamongst a plurality of item tables that are each associated with acorresponding time basis, where the item table includes a record foreach time increment of the time basis, where each respective recordincludes an effective time for the respective time increment; selectinga set of records in the item table that fall within the trend range;generating a snapshot of the project data for each effective time ineach respective selected record in the item table, wherein thegenerating includes: maintaining a history table that stores a versionhistory for each record in the project data that has ever been modified,wherein the version history has at least one corresponding historicalrecord that includes a valid time range that defines a time during whichthe version of the record was valid, maintaining a transaction tablethat stores a transaction record for each record in the project datathat has ever been modified, and executing a trend view on the historytable, the transaction table, and a base table that stores base recordscorresponding to a current version of the records in the project data tocreate a snapshot for each effective time in the selected item tablerecords based at least in part on the one or more historical recordsvalid at the effective time; and in response to the request for trendinganalysis, returning the generated snapshots of project data.
 15. Thecomputer-implemented method of claim 14, where the effective time for atime increment comprises a time at which the time increment ends. 16.The computer-implemented method of claim 14, where each item tableincludes a record for each time increment in the time basis for the itemtable.
 17. The computer-implemented method of claim 16, furthercomprising, with the processor: storing a period table that records eachtime basis for which an item table is stored; accessing the period tableto identify an item table associated with the time basis in the request.18. The computer-implemented method of claim 14 wherein: the at leastone corresponding historical record in the version history also includesa version of the record prior to modification; the trend view isconfigured to, for each effective time in the selected item tablerecords: select historical records in the history table that have avalid time range that includes the effective time; select base recordsfrom the base table that do not have a corresponding transaction recordwith a history valid time that includes the effective time; and combinethe selected historical records and the selected base records to createthe snapshot for the effective time.
 19. The computer-implemented methodof claim 18, where the trend view joins the selected records in the itemtable to the base table and transaction table.
 20. Thecomputer-implemented method of claim 14, where each item table recordstores a display date that is different from the effective date, andwhere the method includes, with the processor, selecting records in theitem table having a display date within the trend range for generatingthe snapshots.